Embedded System: Part 2
= Những kiến thức nào cần có để học Embedded System? = by Le Tran Dat Câu hỏi này chắc là bạn muốn hỏi cách tự học, Đạt sẽ trả lời theo hướng tự học. Học embedded không khó, cái khó là nó yêu cầu nhiều kiến thức ban đầu để có thể bắt đầu làm việc. Đạt làm Embedded Linux nên chỉ có thể đưa ra một số tài liệu có thể tự học Embedded Linux như sau. Để làm Embedded Linux thì bạn cần phải hiểu về Linux, chọn một distro linux nào đấy mà bạn thấy thích rồi dùng thử. Đạt có viết một trả lời về việc cài đặt Linux cho người lần đầu tiên mới sử dụng. Để tăng tốc độ học Linux và cũng là một yêu cầu cơ bản để trở thành một Embedded Linux Developer bạn phải biết sử dụng command line và viết Shell Script. Quyển The Linux Command Line hướng dẫn bạn rất chi tiết và cơ bản về cách sử dụng Linux Command Linux, chính xác là trên Ubuntu. Để hình dung công việc của một Embedded Linux Programmer phải làm hàng ngày bạn nên đọc Embedded Linux Primer: A Practical Real-World Approach (2nd Edition) 720. Quyển này cho bạn khái niệm cơ bản về thế giới Embedded Linux bao gồm Linux cơ bản, cách hệ thống boot, các script được gọi, cách load firmware, cách debug và một số vấn đề chi tiết nho nhỏ khác. Bạn cần phải biết cách build một hệ thống nhúng, cách tốt nhất là sở hữu một cái board và thực hành. Mình may mắn được học Embedded thông qua công việc hàng ngày nên không phải mua board về thực tập. Để tự học thì bạn có thể mua BeagleBone và thực thành với Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux 407 Sau khi build được hệ thống, bạn phải viết chương trình cho hệ thống nhúng. Tùy vào mức độ công việc mà bạn cần những kỹ năng khác nhau. Nhưng về cơ bản, bạn cần phải biết C. Nếu bạn chưa biết gì về C thì nên đọc C Primer Plus (6th Edition) (Developer’s Library) 273, nếu bạn đã có cơ bản về lập trình, đọc thêm quyển The C Programming Language 323 Để lập trình trên Linux, đặt biệt là Embedded Linux có bao gồm Device Driver, bạn phải hiểu cách Kernel hoạt động. Linux Kernel Development (3rd Edition) 277 sẽ cho bạn kiến thức về Kernel, bên cạnh đó một số quyển sách sau sẽ bổ sung thêm kiến thức cho bạn * Linux System Programming: Talking Directly to the Kernel and C Library 151 * Linux Device Drivers 130 Hoặc học khóa học CS6210: Advanced Operating Systems 296 Học Embedded Linux không khó, nó chỉ khó ban đầu Học Android sẽ dễ hơn ở bước đầu, bạn không cần nhiều kiến thức về Android vẫn có thể viết ứng dụng đầu tiên, sau đó độ khó sẽ tăng dần. Để master, bạn phải bỏ ra rất nhiều công sức. Học Embedded Linux sẽ khó hơn, vì bạn cần phải hiểu rất nhiều thứ mới có thể viết được “hello world”. Có thể thấy bước đầu sẽ khó, nhưng về sau sẽ dễ hơn. Nhưng không có nghĩa là Android hay các ngành khác dễ hơn, nếu có thì chỉ là dễ hơn lúc đầu. Source: https://daynhauhoc.com/t/nhung-kien-thuc-nao-can-co-de-hoc-embedded-system/9780/3 by Nguyen Van Nam Sau một thời gian ngâm cứu với lĩnh vực Embedded. Mình xin chia sẽ một số features như sau: Một kỹ sư, hay một ai muốn theo ngành này thì mình sẽ chia ra thành các mảng để mọi người dễ hình dung: # Platform # Conectivity # Cloud # Security I. Platform 1.1. Hardware VD: MCU: PIC, AVR, ARM, 8051, … Board: Raspberry pi, Arduino, mbed, … => Nếu mình cần lập trình cho con nào thì phải tìm hiểu qua datasheet của chúng 1.2. Software 1.2.1. Driver Stack: Hay còn gọi là Device Driver: như TCP/IP, I2C, SPI, USB, CAN, … => Driver Stack sẽ được chia thành 2 tầng chính * Tầng HAL: tầng này sẽ lập trình theo từng dòng vi điều khiển, tần này gần với phần cứng nhất * Tầng API: Tâng này là tầng common sẽ dùng để gọi tầng HAL phía dưới 1.2.2. OS (Hệ điều hành) Hệ thống nhúng có thể ko cần phải dùng tới hệ điều hành. Nhưng đa số các ứng dụng ngày nay cần phải xữ lý nhiều chức năng, cũng như cần có sự tin cậy và độ ổn định cao,đáp ứng thời gian thực thì cần phải có hệ điều hành (OS) * Trong các hệ thống lớn hay người ta thường dùng linux OS * Ngày nay OS rất đa dạng, mà đặc biệt là các OS thời gian thực và tương lai sẽ hướng tới OS thời gian thực có tính nhỏ gọn để ướng dụng trong IoT VD: VxWord, RTX, Free RTOS, micro kernel, Tkernel, contiky, … II. Conectivity Các thiết bị cần phải liên lạc với nhau: wire and wireless * Wire: Dùng mạng lan (TCP/IP protocol) * Wireless: rất đa dạng VD: Wifi, Bluetooth, Cellurla, Zigbee, RF, … Mỗi loại có một giao thức riêng: VD: * Wifi: TCP/IP (IPv4 and IPv6), 6loWPAN * Bluetooth: GAP, GATT. III. Cloud Embedded ngày nay, Cloud rất quan trọng trong trong việc quản lý, điều khiển thiết bị từ xa. Một số giao thức có thể thấy là: HTTP, CoAP, Lighweight M2M, … IV. Security Bảo mật thông tin là một phần không thể thiếu trong thời đại thông tin ngày nay: Một hề thống có tín bảo mật cao sẽ đem lại sự an toàn cho người dùng. Khái niệm bảo mật được biết đến trước đây trong embedded là TLS (Transport Layer Security), và trong IoT là DTLS (đang phát triển) Trên đây là một số khái niệm tổng quan về Embedded mà mình biết. Vì chưa có kinh nghiệm nhiều trong lĩnh vực này nên vẫn còn nhiều thiếu sót. Mình cũng đang học hỏi thêm Ai có nhiều kinh nghiệm trong lĩnh vực này có thể chia sẽ cho mọi người được học hỏi thêm nhé! source: https://daynhauhoc.com/t/nhung-kien-thuc-nao-can-co-de-hoc-embedded-system/9780/21 = Lập trình nhúng và firmware = Lập trình nhúng với Linux là cái gì ? Là lập trình cho 1 thiết bị điện tử mà trung tâm xử lý của nó là một VI XỬ LÝ thường là chip ARM và được cài trên nó 1 phiên bản OS họ Linux. Chức năng chính của cái bo đó nghiêng về xử lý dữ liệu (wifi, ethernet, xử lý hình ảnh…) Công việc chính là viết cái phần mềm hoặc driver cho chạy trên cái bo đó. Vì viết ứng dụng cho hệ điều hành Linux nên tất nhiên phải biết những thứ tạo nên ứng dụng cho Linux. Không cần biết nhiều về phần cứng vì thiết kế phần cứng đã có đội khác nó làm. Còn phần điều khiển phần cứng thì thông qua api của OS, Driver, thư viện, framework nó che đi hết rồi. Nhúng với vi điều khiển là cái gì ? Là lập trình cho thiết bị điện tử mà trung tâm xử lý của nó là một VI ĐIỀU KHIỂN. Nó ít khi được cài một OS, cùng lắm là RTOS, uClinux. Chức năng chính của cái thiết bị đó là điều khiển các thiết bị khác. (Điều khiển robot, điều khiển động cơ, xi lanh…) Công việc chính là tạo ra cái gọi là firmware để nạp vào bộ nhớ của con VĐK cho nó chạy. Vì nó có vô vàn ứng dụng muôn hình vạn trạng nên thằng lập trình thường phải là thằng thiết kế luôn phần cứng. Nên nó phải biết điện tử. Sau khi có phần cứng, không có OS, driver, cùng lắm là có framework, lib nên muốn code được thì phải hiểu phần cứng, phải hiểu điện tử. source: https://daynhauhoc.com/t/lap-trinh-nhung-va-firmware/57959/3 Thể_loại:Electronics archive